class PubSub {
  constructor() {
    this._events = {}
  }
  // 注册
  subscribe(event, callback) {
    // 如果当前 event 存在, 所以只需要继续添加
    if (this._events[event]) {
      this._events[event].push(callback)
    } else {
      // 没有订阅事件
      this._events[event] = [callback]
    }
  }

  // 发布
  publish(event, ...args) {
    // 事件是被订阅的: 对应的事件队列存在
    if (this._events[event]) {
      this._events[event].forEach((callback) => {
        callback(...args)
      })
    }
  }
}

let ps = new PubSub()
ps.subscribe('e_1', (...args) => {
  console.info('e_1 执行了 --- 1')
  console.info('args', args)
})
ps.subscribe('e_1', () => {
  console.info('e_1 执行了 --- 2')
})

ps.subscribe('e_2', (...args) => {
  console.info('e_2 执行了 --- 1')
  console.info('args', args)
})

ps.publish('e_1', 1, 2, 3)
ps.publish('e_2', 4, 5, 6)

console.info('ps', ps)
